#/usr/bin/env python
import fb
import sys
import pickle
import time
import struct
import os

amici_online={}

try:
  print time.time()
  print os.stat("amici_online_pickle")[8] 
  print time.time()-os.stat("amici_online_pickle")[8] 
  sleeped = time.time()-os.stat("amici_online_pickle")[8] 
  if sleeped > 300:
    print "mi sono riavviato dopo", sleeped
    raise

  amici_online_pickle = open('amici_online_pickle','r')
  amici_online.update(pickle.load(amici_online_pickle))
  amici_online_pickle.close()
  print "caricati correttamente", len(amici_online), "amici"
except:
  print "nessun file di amici trovato"

appena_disconnessi=[]
chat = fb.FacebookChat(sys.argv[1],sys.argv[2])
chat.login()
print "ora sono connesso."
riga = struct.Struct('Qddd')
connessi_now = struct.Struct('dH')

log = open('Data/Log.dat','ab')
connessioni = open('Data/Instant_Connections.dat','ab')
while True:
#  print time.strftime('%H:%M:%S',time.localtime()),"sono connessi in", len(amici_online)
  lista = chat.buddy_list().keys()
  sys.stdout.write('-')
  sys.stdout.flush()
  ora_attuale = time.time()
  connessioni.write(connessi_now.pack(ora_attuale,len(lista)))
  connessioni.flush()
  for amico in lista:
    if amico in amici_online: continue
    else:
      amici_online.update({amico:time.time()})
      print
      print amico, "si e' connesso alle", time.time(),"ora sono connessi in ", len(amici_online)
  for amico in amici_online:
    if amico not in lista:
      durata_connessione = ora_attuale - amici_online[amico]
      print
      print amico, "si e' disconnesso dopo", int(durata_connessione), "secondi","ora sono connessi in ", len(amici_online)
      appena_disconnessi.append(amico)
      log.write(riga.pack(int(amico), amici_online[amico], ora_attuale, durata_connessione))
      log.flush()
  for amico in appena_disconnessi:
    del amici_online[amico]
  amici_online_pickle = open('amici_online_pickle','w')
  pickle.dump(amici_online, amici_online_pickle)
  amici_online_pickle.close()
  del appena_disconnessi[:]

